(function($){
$(document).ready(function(){
	
//------- 插件与通用模块区 ----------------------
	
	//内部可视对象
	var windows = {};
	
	//操作提示框
	windows.prompt = function(text){
	
		$("#body-prompt").empty().remove();
			
		$("body").append(
		"<div id='body-prompt'>"
		+ ($(this).attr("body-prompt") || text)
		+"</div>"
		);

		$("#body-prompt").css({
			marginLeft:-$("#body-prompt").outerWidth()/2
		}).fadeIn(300,function(){
			$(this).delay(1000).fadeOut(600 ,function(){
				$(this).empty().remove();
			});
		});
	}
	
	//递归回父级
	windows.parentElements = function(that,regexp){	//尾递归回父级，默认 li 
		var reg = regexp || new RegExp(/(li|LI)/g);
		if( reg.test(that[0].nodeName) ) return that;
		return windows.parentElements( that.parent() );
	}
	
	//题目选项绑定, 初始化状态
	windows.topicSelect = function(li){
		($(li) || $("#editing-ontainer>li")).each(function(){
			var limit = $(this).attr("type");
			if( 
				limit == 0 ||	//单选开通
				limit == 1		//多选开通
			){
				var optionSel = $(this).find("[name=tab-cont] .cont-value>div");
					optionInp = $(this).find(">.title .title-text"),
					sel = optionInp.find(">span:eq(0)").clone();
					_this = this;
					
				optionInp.find(">span").empty().remove();
				
				optionSel.each(function(){	//将input选项添加到题目选项
					var input = sel.find("input");
					
					//题目选项 input勾选框name值
					input.attr("name", input.attr("type")+"-"+$(_this).attr("marks"));
					
					//题目选项 文字
					sel.find(">font").html( $(this).find("input.p1").val() );
					
					optionInp.append( sel.clone() );
				});
				
				if( limit == 1 ){	//多选题，最多可选下拉菜单
					var checkSel = $(this).find("[name=tab-cont] .cont-num .select-option"),
						elm = checkSel.find(">li").eq(0).clone();
					checkSel.empty();
					optionSel.each(function(i){
						checkSel.append( elm.clone().html(i+1) );
					});
				}
			}
		});
	}
	
	//给需要保存的表单打上标记
	windows.marks = function(){
		
		var li = arguments[0];
		if( li.attr("marks") ){	//每一道题新增的时候都会打上 marks 标记 -> 时间戳
		/*
		 *  选择题勾选框已完成 name 标记
		 *	这里给需要往后台传值的标签加上标记
		 */
		}
	}
	
	//body-prompt 操作提示
	$("[body-prompt]").live("click", windows.prompt );
	
	//radio
	$(".radio").each(function(i){
		
		var css = "radio-checked";
		var css1 = "radio-disabled";
		var input = $(this).find("input[type=radio]")[0];
		
		if( $(this).hasClass(css) ){
			input.checked = true;
		}else{
			input.checked = false;
		}
		
		!i && $(".radio").live("click",function(){
			if( $(this).hasClass(css1) ) return;
			
			var input = $(this).find("input[type=radio]")[0];
			input.checked = true;
			$("input[name="+ input.name +"]").parent(".radio").removeClass(css);
			$(this).addClass(css);
		});
	});
	
	//checkbox
	$(".checkbox").each(function(i){
	
		var css = "checkbox-checked";
		var css1 = "checkbox-disabled";
		var input = $(this).find("input[type=checkbox]")[0];
		
		if( $(this).hasClass(css) ){
			input.checked = true;
		}else{
			input.checked = false;
		}
		
		!i && $(".checkbox").live("click",function(){
			var input = $(this).find("input[type=checkbox]")[0];
			if( $(this).hasClass(css1) ) return;
			
			input.checked = input.checked ? 
			(function(el){ el.removeClass(css); return false; })($(this))
			: (function(el){ el.addClass(css); return true; })($(this));
		});	
	});
	
	//alert 弹窗插件
	$(".abUI-alert[alertid]").live("click",function(){
		
		var el = $( "#"+$(this).attr("alertid") );
		try{
			if( !el.parent().attr("class").match("abUI-window-cover") ){
				el.wrap('<div class="abUI-window-cover"></div>');
			}
		}catch(err){
			el.wrap('<div class="abUI-window-cover"></div>');
		}
		
		//弹窗信息读取
		var alertText = $(this).attr("alertText");
		!!alertText && el.find("p").eq(0).html(alertText);
		//end
		
		//打开
		el.fadeIn(100).parent(".abUI-window-cover").fadeIn(100);
		
		//关闭
		$(".abUI-off, .abUI-on").click(function(){
			var parent = function(el){		
				if( !el.attr("class") || !el.attr("class").match("abUI-window-cover") ){
					return parent( el.parent() );
				}else{
					return el;
				}
			},
			_this = this;
			parent($(this)).fadeOut(100, function(){ $(_this).parent().find("input").unbind("click") });
		});
	});
	
	//tab 选项卡插件
	!!jQuery && (function($){

		var mx_tab = function(tit, ul){
			
			$(tit).each(function(){
			
				var name = $(this).attr("name");	
				var list = $(tit+"[name="+name+"]>*"); //选项列表
				var evt = $(this).attr("event");	//事件机制
				evt = !!evt && "on"+evt in list[0] && evt || "click";	//默认为 click 
				
				!!list.length && list.live( evt, function(){
					alert(1);
					$(this).addClass("hover").siblings().removeClass("hover");
					$(ul+"[name="+name+"]>*").eq( $(this).index() ).show(0).siblings().hide(0);
				});
			});
		};
		
		//注册选项卡
		mx_tab(".mx-tab-tit", ".mx-tab-ul");
		
	})(jQuery);
	
//------ 问卷编辑复杂功能模块区 --------------------------------------------------------------------------
	
	//需要动态绑定节点的方法
	windows.resetFun = (function(fn){
		var run = function(topic_li){ $.each(fn,function(i){ typeof fn[i] === "function" && fn[i](topic_li) }); return run};
		return run();
	})([
	(function(){//select	此处为 select 下拉插件
		var fun = (function(){
			
			var ret = function(){
				$(".select").each(function(i){
					this.index = i;
				});
				return ret;
			};
			return ret();
		})()
		,
		slt = {}
		,
		fun_select = [
			function(){
				var text = $(this).text();
				slt.input.val( !(text.length>10) ? text : (text.slice(0,10)+"...") );
			},
			function(){
				slt.select.slideUp(200,function(){ slt.input.parent().css({zIndex:''}) });
			}
		];
		
		$(".select .select-selectedIndex").live("click", function(e){
			
			slt.input = $(this);
			slt.select = $(this).siblings(".select-option");
			
			$(".select").each(function(){
			
				if( this.index != slt.input.parent()[0].index && $(this).css("display") != "none" )
				$(this).find(".select-option").slideUp(0,function(){ $(this).parent().css({zIndex:''}) });
			});
			
			slt.input.parent().css({zIndex:'9999'});
			slt.select.slideDown(200);
			e.stopPropagation();
			
			slt.select.find("li").unbind("click",fun_select[0]).click(fun_select[0]);
			
			$(document).unbind("click",fun_select[1]).click(fun_select[1]);
		});
		
		return fun;
	})(),
	function(){	//为每一道 li 节点，加上 marks 标记 -> 时间戳
		arguments[0] && arguments[0].attr("marks", new Date().getTime());
	},
	function(){	//tester 跳题弹窗
		$(".cont-value .p2").addClass("abUI-alert").attr({
			"readonly" : "readonly",	//只读
			"alertid" : "jump-topic"	//弹窗ID
		});
	},
	function(){	//题目输入绑定
	
		var li = arguments[0];	//当前li节点
		if( li ){
			var topic = ["（单选）","（多选）","（填空）","（文字说明）"];
			//题目按键输入绑定，静态绑定
			li.find("div[name=tab-cont]").find("input:eq(0), textarea:eq(0)").
			unbind("keyup blur").bind("keyup blur", function(){
				li.find(".title .title-text h3").html( "<span>"+ (li.index()+1) +"、</span>"+$(this).val()+topic[li.attr("type")] );
			});
		}	
	},
	function(){	//添加题目，初始化选项
		
		/*
		 *	新增题目初始化题目选项，不传参初始化所有新增的选择题
		 *	可传当前li题目块，单独初始化一块，arguments[0] 为当前题目的 li 节点
		 */
		windows.topicSelect( arguments[0] );
	}
	]);

	//添加题目
	$("#editing-list a").click(function(){
		
		var topic_li = $("ul#editing-ontainer").append(
			
			$("ul#editing-model>li").eq($(this).index()).clone()
			
		).find(">li").last().slideDown();

		//动态绑定回调
		windows.resetFun( topic_li /* 将 li 节点传递给回调函数 */ );
	});
	
	//题目块操作 保存/编辑、删除、上移、下移、最前、最后
	(function(){
		var li = windows.parentElements,	//父级li
		funArr = [
			function(){
				//保存
				var cont = li.apply( null, arguments ).find("div[name=tab-cont]");
				var parameter = arguments[0];
				parameter.hasClass("e1") ? 
				cont.slideUp(300, function(){
					
					//收起编辑区
					parameter.removeClass("e1").addClass("e7").attr("title","编辑");
					
					//给表单打标记
					windows.marks( li( parameter ) /* 当前需要保存的题目 li 块 */ );
					
					//保存成功回调，这里为模拟，需要在ajax保存回调
					windows.prompt("保存成功！");
					
				}) : cont.slideDown(300, function(){
				
					parameter.removeClass("e7").addClass("e1").attr("title","保存");
				});
			},
			function(){
				//删除
				var elm = li.apply( null, arguments );
				var del = function(){
					//$(this).unbind("click",del);
					elm.hide(500, function(){ 
						$(this).empty().remove();
						$("#editing-ontainer div[name=tab-cont]").find("input:eq(0), textarea:eq(0)").blur();
					});
				}
				$("#off-edit .button input.abUI-on").bind("click", del);
			},
			function(){
				//上移动
				var elm = li.apply( null, arguments );

				if( !elm.index() ) {
					windows.prompt("已到最前！");
					return;
				}

				elm.prev().slideUp(300, function(){
					
					elm.after( $(this).fadeIn(0) );
					$("html,body").animate({
					
						scrollTop: elm.offset().top - 20
					},300, function(){
					
						windows.prompt("上移动成功！");
						$("#editing-ontainer div[name=tab-cont]").find("input:eq(0), textarea:eq(0)").blur();
					});
				});
			},
			function(){
				//下移动
				var elm = li.apply( null, arguments );
				if( elm.index() === elm.parent().find(">li").index() ) {
					windows.prompt("已到最后！");
					return;
				}
				elm.next().slideUp(300, function(){
					
					elm.before( $(this).fadeIn(0) );
					
					setTimeout(function(){
						$("html,body").animate({
							scrollTop: elm.offset().top - 20
						},300, function(){
							windows.prompt("下移动成功！");
							$("#editing-ontainer div[name=tab-cont]").find("input:eq(0), textarea:eq(0)").blur();
						});	
					},0);
				});
			},
			function(){
				//最前
				var elm = li.apply( null, arguments );
				if( !elm.index() ) {
					windows.prompt("已到最前！");
					return;
				}
				elm.slideUp(300, function(){
					
					elm.siblings().first().before( $(this).fadeIn(0) );
					$("html,body").animate({
					
						scrollTop: elm.siblings().first().offset().top - 20
					},300, function(){
					
						windows.prompt("移动到最前成功！");
						$("#editing-ontainer div[name=tab-cont]").find("input:eq(0), textarea:eq(0)").blur();
					});
				});
			},
			function(){
				//最后
				var elm = li.apply( null, arguments );
				if( elm.index() === elm.parent().find(">li").index() ) {
					windows.prompt("已到最后！");
					return;
				}
				elm.slideUp(300, function(){
					
					elm.siblings().last().after( $(this).fadeIn(0) );
					
					setTimeout(function(){

						$("html,body").animate({
						
							scrollTop: elm.parent().find(">li").last().offset().top - 20
						},300, function(){
			
							windows.prompt("移动到最后成功！");
							$("#editing-ontainer div[name=tab-cont]").find("input:eq(0), textarea:eq(0)").blur();
						});
					},0);
				});
			}
		];
	
		$("#editing-ontainer .operation a").live("click", function(){
			var i = $(this).index();
			typeof funArr[i] === "function" && funArr[i]( $(this) );
		});
	})();
	
	//跳题逻辑 checkbox
	$(".bot-cont .checkbox").live("click",function(){
		var _this = this;
		setTimeout(function(){
			$(_this).hasClass("checkbox-checked") && $(_this).find("input[type=checkbox]")[0].checked &&
			$(_this).parent().siblings(".up-jump").slideDown(200) ||
			$(_this).parent().siblings(".up-jump").slideUp(200);
		},0);
	});
	
	//选项输入 按键绑定
	$("#editing-ontainer li div[name=tab-cont] .cont-value >div>input.p1").live("keyup", function(){
		var li = windows.parentElements( $(this) ),	//取得题目 li 节点块
			topicList = li.find("div[name=tab-cont] .cont-value>div"),
			topicIndex = topicList.eq(0).index(),	//排除 输入 选项列上面同级元素所占数组列
			selList = li.find(".title>.title-text>span"),
			selIndex = selList.eq(0).index();	//排除 答题 选项列上面同级元素所占数组列
		
		selList.eq(
			$(this).parent().index() - topicIndex //去除 index() 取值差异
		).find(">font").html( $(this).val() );
	});
	
	//题目选项操作
	$("#editing-ontainer li div[name=tab-cont] .cont-value >div>div>a").live("click", function(){
		
		var li = windows.parentElements($(this)),
			topicList = li.find("div[name=tab-cont] .cont-value>div"),
			topicIndex = topicList.eq(0).index()-1,	//排除 输入 选项列上面同级元素所占数组列
			selList = li.find(".title>.title-text>span"),
			selIndex = selList.eq(0).index()-1;	//排除 答题 选项列上面同级元素所占数组列
		
		var radioMax = 6,	//单选题最多允许 6 个选项
			checkboxMax = 10,	//多选题最多允许 10 个选项
			list = $(this).parent().parent(),
			type = li.attr("type"),	//题目类型 0 1 2 3 ，单选、多选、填空、文字说明
			listNum = list.parent().find(">div").index() - topicIndex;	//当前选项数量
		
		var _this = this;	//缓存作用域
		[	
			function(){	//新增
				
				var listsel = $("#editing-model li[type="+type+"] div[name=tab-cont] .cont-value>div:eq(0)").clone();
				
				type == 0 && (//单选
				listNum < radioMax &&	//限制题目数量
				list.after( listsel ).hide(0).slideDown(200) ||
				windows.prompt( "单选题 最多只能新增 " +radioMax+ " 条" ));	//超额提醒
				
				type == 1 && (//多选
				listNum < checkboxMax &&	//限制题目数量
				list.after( listsel ).hide(0).slideDown(200) ||
				windows.prompt( "多选题 最多只能新增 " +checkboxMax+ " 条" ));	//超额提醒
			
				windows.topicSelect( li /* 初始化当前题目的选项 */ );
			},
			function(){	//删除
			
				listNum > 1 &&
				list.slideUp(200,function(){
					$(this).empty().remove();
					windows.topicSelect( li /* 初始化当前题目的选项 */ );
				}) ||
				windows.prompt( "已经剩下最后 " + listNum + " 条" );	//超额提醒
			},
			function(){	//上移
				if(list.index()-topicIndex>1)
				list.slideUp(200, function(){
					list.prev().before( $(this).slideDown(200) );
					windows.topicSelect( li /* 初始化当前题目的选项 */ );
				});
				else
				windows.prompt( "已经是第一条" );	//超额提醒
			},
			function(){	//下移
				if(list.index()-topicIndex!=listNum)
				list.slideUp(200, function(){
					list.next().after( $(this).slideDown(200) );
					windows.topicSelect( li /* 初始化当前题目的选项 */ );
				});
				else
				windows.prompt( "已经是最后一条" );	//超额提醒
			}
		][ $(_this).index() ](/* 执行方法 */);
	
	});

	//问卷调查
	$("#click-create-paper").click(function(){
			
		var title = $("#edit-paper-title"),
		description = $("#edit-paper-description"),
		in_ter = $("#create-paper").find("input:eq(0), textarea:eq(0)");
		
		//问卷读取
		in_ter.eq(0).val( title.html() );
		in_ter.eq(1).val( description.html() );
		//end	
		
		//问卷输入限制读取
		windows.paper();
		
		//问卷修改
		function edit(){
			$(this).unbind("click",edit);
			title.html( in_ter.eq(0).val() );
			description.html( in_ter.eq(1).val() );
		}
		$("#create-paper .button input.abUI-on").bind("click", edit);
		//end
	});

	//问卷调查输入字符限制
	$("#create-paper textarea:eq(0)").bind("keyup", windows.paper = function(){	//问卷调查
		var elm = $("#create-paper textarea:eq(0)").siblings("strong"),
			max = elm.find("label").html()>>0,
			len = $("#create-paper textarea:eq(0)").val().length;
			
		//已输入
		elm.find("span").eq(0).html( len );
		
		//还剩于
		elm.find("span").eq(1).html( max>len&&(max-len)||0 );
		
		//超额禁止
		max>len && 
		elm.removeClass("error").parent().siblings(".button").find(".button1").removeAttr("disabled") || 
		elm.addClass("error").parent().siblings(".button").find(".button1").attr("disabled","disabled");
	});
	
	//跳题弹窗
	$(".cont-value input.p2").live("click", function(){	
		
		var _this = this;
		
		//显示当前题目
		$("#jump-topic .topic span").html(
			windows.parentElements($(this)).find("h3").eq(0).html()
		);
		
		//选择题目
		$("#jump-topic .button .abUI-on").click(function(){
			var checkbox = $(this).parent().siblings(".checkbox-topic").find("input[type=checkbox]"),
				inpSel = $(this).parent().siblings(".topic-all").find("input.select-selectedIndex").val(); 
			$(_this).val( checkbox[0].checked ? inpSel : "" );
		});
	});
	
	//跳转题目勾选
	$("#jump-topic .checkbox-topic .checkbox").live("click", function(){
		var _this = this;
		setTimeout(function(){
			$(_this).hasClass("checkbox-checked") && $(_this).find("input[type=checkbox]")[0].checked &&
			$("#jump-topic .topic-all").slideDown(200) ||
			$("#jump-topic .topic-all").slideUp(200);
		},0);
	});
	
	//多选题批量增加选项
	$(".abUI-alert[alertid=select-batch]").live("click", function(){
		var max = 10;	//最多添加10条，自动扣除原有的选项
		
		var li = windows.parentElements($(this)),
			topicList = li.find("div[name=tab-cont] .cont-value>div"),
			topicIndex = topicList.eq(0).index()-1;	//排除 输入 选项列上面同级元素所占数组列
			
		var arr = [],	//添加的数目
			button = $("#select-batch .button .abUI-on");	//确定按钮
		
		//输入检测
		$("#select-batch textarea").val("").unbind("keyup focus").bind("keyup focus",function(){
		
			arr = $("#select-batch textarea").val().split("\n");
			if( arr.length > max - (topicList.index()-topicIndex) ){
				button.attr("disabled","disabled");
				windows.prompt(" 添加数量 + 原有数量 超过 "+max+ "条");
			}else{
				button.removeAttr("disabled");
			}
		});
		
		button.click(function(){	//确定添加
		
			if( arr.length <= max - (topicList.index()-topicIndex) ){
				$.each(arr, function(i){
					var list = $("#editing-model li[type=1] div[name=tab-cont] .cont-value>div:eq(0)").clone();
					list.find(">input.p1").val( arr[i] );
					li.find("div[name=tab-cont] .cont-value>div").last().after( list );
				});
				windows.topicSelect(li);
			}else{
				windows.prompt("添加失败");
			}
		});
	});
	
	//填空题插入填空
	$("#editing-ontainer li[type=2] div[name=tab-cont] .button").live("click", function(){
	
		var tare = $(this).siblings("textarea");
		tare.val( tare.val()+" <input type='text' /> " ).blur();
	});
	
//--------- 问卷首页列表 ------------------------------------------------------------------------
	$(".paper-list-ul .edit-icon .c2").live("click", function(){	//发布
		$(this).hasClass("c6") &&
		$(this).removeClass("c6").html("发布") ||
		$(this).addClass("c6").html("停止");
	});
	
});
})(jQuery);


